﻿#region
/* 
 * Descripciòn: Clase que representa la preparacìòn de parametros.
 * Programador: Marco Torres
 * Fecha: 14 Mayo 2012
 * 
 * Log de modificaciones.
 * Descripciòn:
 * Programador:
 * Fecha:
 */
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Demo.Services.Contracts.DTO.Filters;
using System.Data;
using System.Data.SqlClient;
using Demo.CommonBase.Logging;
using System.Reflection;
using Demo.CommonBase.Exceptions;
using Demo.Services.Contracts.DTO.Infos;
using Demo.CommonBase.DTO.Filters;
using Demo.CommonBase.DTO.Infos;

namespace Demo.Services.Integration.DAO.IntegrationComponents.Helpers
{
    public class ProyectDAOHelper
    {
        // <summary>
        /// Obtiene parametros para obtener un recurso por nombre 
        /// </summary>
        /// <param name="filter">filtros</param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetProyectByFilterParams(ProyectFilter filter)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();
                
                parameter = new SqlParameter("@PageSize", filter.pageSize);
                result.Add(parameter);
                
                parameter = new SqlParameter("@PageNum", filter.PageNum);
                result.Add(parameter);
                
                parameter = new SqlParameter("@Name", filter.Name);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        /// <summary>
        /// Obtener parametros para guardar un proyecto.
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetSaveParameters(ProyectInfo info)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@nombre", info.Name);
                result.Add(parameter);

                parameter = new SqlParameter("@fechaInicio", info.DateStart);
                result.Add(parameter);

                parameter = new SqlParameter("@fechaFin", info.DateEnd);
                result.Add(parameter);

                parameter = new SqlParameter("@horas", info.Hours);
                result.Add(parameter);

                parameter = new SqlParameter("@estatusId", info.StatusId);
                result.Add(parameter);
                
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        /// <summary>
        /// Obtener parametros para el borrado de un registro.
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetIdParameter(int id)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@Id", id);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        /// <summary>
        /// Obtener parametros para guardar un proyecto.
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetUpdateParameters(ProyectInfo info)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info(MethodInfo.GetCurrentMethod().ToString());
                result = new List<IDbDataParameter>();

                parameter = new SqlParameter("@Id", info.Id);
                result.Add(parameter);

                parameter = new SqlParameter("@nombre", info.Name);
                result.Add(parameter);

                parameter = new SqlParameter("@fechaInicio", info.DateStart);
                result.Add(parameter);

                parameter = new SqlParameter("@fechaFin", info.DateEnd);
                result.Add(parameter);

                parameter = new SqlParameter("@horas", info.Hours);
                result.Add(parameter);

                parameter = new SqlParameter("@estatusId", info.StatusId);
                result.Add(parameter);

            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        // <summary>
        /// Obtiene parametros para obtener proyectos por nombre 
        /// </summary>
        /// <param name="filter">filtros</param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetProyect_ByNameParams(ComboBoxFilter filter)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Start", filter.Pagination.PageNum); result.Add(parameter);

                parameter = new SqlParameter("@Limit", filter.Pagination.PageSize);
                result.Add(parameter);

                parameter = new SqlParameter("@Name", filter.Name);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        public static IList<IDbDataParameter> GetProyectByPage(PaginationInfo pagin, ProyectFilter filters)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Name", filters.Name);
                result.Add(parameter);
                parameter = new SqlParameter("@DateStart", filters.DateStart);
                result.Add(parameter);
                parameter = new SqlParameter("@DateEnd", filters.DateEnd);
                result.Add(parameter);
                parameter = new SqlParameter("@Hours", filters.Hours);
                result.Add(parameter);
                parameter = new SqlParameter("@StatusId", filters.StatusId);
                result.Add(parameter);                
                parameter = new SqlParameter("@Start", pagin.PageNum);
                result.Add(parameter);
                parameter = new SqlParameter("@Limit", pagin.PageSize);
                result.Add(parameter);
                parameter = new SqlParameter("@Order", pagin.Sort);
                result.Add(parameter);
                parameter = new SqlParameter("@Direction", pagin.Direction);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }

        // <summary>
        /// Obtiene parametros para obtener un recurso por nombre 
        /// </summary>
        /// <param name="filter">filtros</param>
        /// <returns></returns>
        public static IList<IDbDataParameter> GetSaveDetailParams(int id, string listItem)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Id", id);
                result.Add(parameter);
                parameter = new SqlParameter("@ListItem", listItem);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }
        public static IList<IDbDataParameter> GetCheckNameParams(int id, string name)
        {
            IList<IDbDataParameter> result;
            SqlParameter parameter;
            try
            {
                Logger.Info();
                result = new List<IDbDataParameter>();
                parameter = new SqlParameter("@Id", id);
                result.Add(parameter);
                parameter = new SqlParameter("@Name", name);
                result.Add(parameter);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                throw new UnhandledException(MethodInfo.GetCurrentMethod(), ex);
            }

            return result;
        }
    }
}
